perm filename CARNES.FAI[AER,HPM]5 blob
sn#166360 filedate 1975-07-01 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 TITLE CARNES
C00004 00003 AR2TAB: MOVEI T,44 TOTAL BITS/WORD
C00006 00004 CAR12: D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D
C00035 00005 END
C00036 ENDMK
C⊗;
TITLE CARNES
;FOR RECOGNIZING CARS
ENTRY VCAR
ENTRY CAR12,CARW12,CARH12
EXTERN CORGET,CORREL,SQRS
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BPTAB←←12
LINTAB←←13
T←1 ↔ TT←2 ↔ TTT←3 ↔ ARRY1←4 ↔ ARRY2←5 ↔ P←17
A←6 ↔ B←7 ↔ C←10 ↔ D←11 ↔ E←13 ↔ F←14 ↔ G←15
RETAD: 0
TEMP: BLOCK 25 ;TEMPORARY STORAGE FOR STUFF
AR2TAB: MOVEI T,44 ;TOTAL BITS/WORD
IDIV T,BYBI(ARRY2) ;BYTE SIZE
MOVEM T,WDBY(ARRY2) ;BYTES PER WORD
SUBI TT,44 ;-NUMBER OF USED BITS/WORD
MOVNM TT,WDBI(ARRY2) ;SAVED
ADD T,LNBY(ARRY2)
SUBI T,1
IDIV T,WDBY(ARRY2) ;NUMBER OF WORDS/SCANLINE
MOVEM T,LNWD(ARRY2)
MOVE TT,T ;WORDS/LINE
IMUL TT,WDBY(ARRY2) ;BYTES/WORD
MOVEM TT,LNBYA(ARRY2) ;GIVES BYTES/LINE, INCLUDING NULLS
IMUL TT,PCLN(ARRY2)
MOVEM TT,PCBYA(ARRY2) ;TOTAL BYTES/PIC, INCL. NULLS
IMUL T,PCLN(ARRY2) ;LINES IN THE PICTURE
MOVEM T,PCWD(ARRY2) ;WORDS IN THE PICTURE
MOVE T,LNBY(ARRY2)
IMUL T,PCLN(ARRY2)
MOVEM T,PCBY(ARRY2) ;BYTES/PIC, NOT INCL. NULLS
MOVEI T,14(ARRY2)
ADD T,PCLN(ARRY2)
MOVEM T,BPTAB(ARRY2) ;ADDRESS OF BYTE POINTER TABLE
ADD T,LNBYA(ARRY2) ;ADDR OF FIRST WORD IN PICTURE
MOVN TT,PCLN(ARRY2) ;SET UP CNTR FOR LINE ADDRESSES
HRL TT,TT
HRRI TT,LINTAB(ARRY2)
LTLP: MOVEM T,(TT) ;MAKE LINE TABLE
ADD T,LNWD(ARRY2)
AOBJN TT,LTLP
MOVN TT,BPTAB(ARRY2)
HRL TT,LNBYA(ARRY2) ;SET UP CNTR FOR BYTE TABLE
AOBJN TT, ;DECR ADDRESS AND INCR COUNT BY 1
MOVN TT,TT
MOVEI T,4400
ADD T,BYBI(ARRY2)
LSH T,6
HRLZ T,T
BYLP: MOVEM T,(TT) ;MAKE BYTE POINTER TABLE
IBP T
AOBJN TT,BYLP
POPJ P,
CAR12: D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ C ↔ C ↔ C ↔ C ↔ C ↔ A ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
D ↔ C ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ C ↔ D
D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D
D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D
D ↔ C ↔ C ↔ A ↔ C ↔ C ↔ C ↔ C ↔ C ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
D ↔ C ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ C ↔ D
D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D
D ↔ D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D ↔ D
D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D
NOA←←=79 ↔ NOB←←=40 ↔ NOC←←=95 ↔ NOD←←=72
CARHIG←←=26 ↔ CARWID←←=11
CARW12: CARWID
CARH12: CARHIG
X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D
CARM←←TEMP ↔ SHFT2←TEMP+1 ↔ AVCAR←←TEMP+2 ↔ AY2←←TEMP+3
BX1←←TEMP+4 ↔ BY1←←TEMP+5 ↔ BX2←←TEMP+6 ↔ BY2←←TEMP+7
SOUWIN←←TEMP+10 ↔ DESWIN←←TEMP+11 ↔ DEXSKP←←TEMP+12 ↔ DEYSKP←←TEMP+13
WSIZ1←←TEMP+14 ↔ DWSIZ←←TEMP+15 ↔ WSIZY1←←TEMP+16
SOUSIZ←←TEMP+20 ↔ WSIZ←←TEMP+21 ↔ DWSIZ←←TEMP+22 ↔ NEGXC←TEMP+23
VCAR: POP P,RETAD
POP P,CARM
POP P,BX2 ;A CARRELATOR. FINDS THE BEST MATCH
POP P,BY2 ;TO A CAR
POP P,BX1 ;IN ARRY2(BX1:BY1,BX2:BY2)
POP P,BY1
POP P,ARRY2
MOVE X1,BX1
MOVE X2,BX2 ; VCAR(
MOVE Y1,BY1 ; PICT,BX1,BY1,BX2,BY2);
MOVE Y2,BY2
MOVEI T,5 ;TABLE)
SUB T,BYBI(ARRY2)
HRRZM T,SHFT2
FIXB: CAMLE X1,X2 ;FIRST FIX UP THE LIMITS SO
EXCH X1,X2 ;X1≤X2, X1≥0 X2<WIDTH ETC.
CAIGE X1,0
MOVEI X1,0
MOVE T,LNBY(ARRY2)
CAML X2,T
MOVEI X2,-1(T)
CAMLE Y1,Y2 ;SIMILAR FOR Y
EXCH Y1,Y2
CAIGE Y1,0
MOVEI Y1,0
MOVE T,PCLN(ARRY2)
CAML Y2,T
MOVEI Y2,-1(T)
CAMG X1,X2
CAMLE Y1,Y2
JRST FIXB
MOVEM X1,BX1
MOVEM X2,BX2
MOVEM Y1,BY1
MOVEM Y2,BY2
MOVE T,BX2 ;QUIT IF DESTINATION WINDOW IS TOO SMALL
SUB T,BX1
SUBI T,CARWID
JUMPLE T,QUITR
MOVE T,BY2
SUB T,BY1
SUBI T,CARHIG
JUMPLE T,QUITR
THIS←←TT ↔ SIZ←←TTT
MOVEI X2,CARWID
MOVEI X1,=1
MOVEI Y2,CARHIG
MOVEI Y1,=1
MOVEI SIZ,1(X2) ;CALCULATE SIZE OF BUFFER AREA
SUB SIZ,X1 ;FOR THE SOURCE WINDOW CODE
MOVEM SIZ,WSIZ1 ;WILL BE X WINDOWSIZE-1
MOVEM SIZ,WSIZ ;IS X WINDOWSIZ
MOVNM SIZ,DEXSKP ;WILL BE DELTA XB - DELTA XA
MOVEI T,1(Y2)
SUB T,Y1
MOVEM T,WSIZY1 ;WILL BE X WINDOWSIZE-1
MOVNM T,DEYSKP ;WIL BE DELTA YB - DELTA YA
IMUL SIZ,T
MOVEM SIZ,SOUSIZ ;SOURCE WINDOW SIZE (IN PIXELS)
ASH SIZ,1
ADDI SIZ,1
PUSHJ P,CORGET ;AND MAKE THAT BUFFER
HALT
MOVEM THIS,SOUWIN
SUBI THIS,1
MOVN T,T
HRLZ T,T
HRRI T,LINTAB(ARRY1) ;Y COUNTER
ADD T,Y1
MOVE 0,BX2 ;FINISH UP MAKING DELTA XB -DELTA XA
SUB 0,BX1
ADDI 0,1
MOVEM 0,DWSIZ
ADDM 0,DEXSKP
MOVE 0,BY2 ;AND THE Y'S TOO
SUB 0,BY1
ADDI 0,1
ADDM 0,DEYSKP
SOS WSIZ1 ;NOT TO MENTION X WINDOWSIZ-1
SOS WSIZY1 ;AND Y WINDOWSIZ-1
MOVE G,[MOVE TT,0(T)]
MOVEI B,0
;DON'T FORGET! A,B,C,D ARE X1,X2,Y1,Y2 ALSO
;SET UP INNER
ILYLP: MOVE TTT,WSIZ ;"LOOP" OF THE CORRELATION
ILXLP: PUSH THIS,G ;A SEQUENCE OF
ADDI G,1 ; MOVE TT,POSB(T)
MOVE A,CAR12(B)
ADDI B,1
LSH A,27
ADD A,[ADD 0,SQRS(TT)]
PUSH THIS,A
SOJG TTT,ILXLP
ADD G,DEXSKP
AOBJN T,ILYLP
PUSH THIS,[JRST INRDON] ;AND THE FINAL INSTR.
MOVE X1,BX1 ;MAKE THE DESTINATION
MOVE X2,BX2 ;WINDOW BUFFER
MOVE Y1,BY1
MOVE Y2,BY2
MOVEI SIZ,1(X2)
SUB SIZ,X1
MOVEM SIZ,DWSIZ
MOVEI T,1(Y2)
SUB T,Y1
IMUL SIZ,T
PUSHJ P,CORGET
HALT
MOVEM THIS,DESWIN
SUBI THIS,1
MOVN T,T ;Y COUNTER
HRLZ T,T
HRRI T,LINTAB(ARRY2)
ADD T,Y1
MOVE E,BPTAB(ARRY2) ;BYTE POINTER SKELETON
ADDI E,-1(X1) ;FOR DESTINATION
MOVE E,(E)
BUYLP: MOVE F,E ;UNPACKS THE DESTINATION
ADD F,(T) ;WINDOW, ONE WORD/SAMPLE
MOVE TTT,DWSIZ
BUXLP: ILDB 0,F
LSH 0,@SHFT2 ;SHIFT TO 5 BITS
PUSH THIS,0
SOJG TTT,BUXLP
AOBJN T,BUYLP
SETZM AVCAR
MOVN B,DEXSKP ;NOW ACTUALLY CORRELATE
SUBI B,1
MOVEM B,NEGXC
MOVE E,CARM
SUBI E,1 ;SET UP POINTER FOR RESULTS
MOVE TTT,DEYSKP ;NUMBER OF ROWS
MOVE T,DESWIN ;WHERE TO START
CRYLP: HRL T,NEGXC ;INIT X CNTR, BUT KEEP OLD POSN
CRXLP: SETZB A,B ;ACCUMULATE CURRENT SUM IN A
SETZB C,D
JRST @SOUWIN ;JUMP TO PREVIOUSLY CREATED CODE
INRDON: MOVE F,A
ASH F,-24 ;CALCULATE SIGMA (A-ABAR)↑2
MOVE TT,F ;ABAR REMAINS IN TT
IDIVI F,NOA
IMUL TT,F
TLZ A,777774
SUB A,TT
MOVE TT,F
MOVE F,B
ASH F,-24 ;CALCULATE SIGMA (B-BBAR)↑2
IMUL F,F
IDIVI F,NOB
TLZ B,777774
SUB B,F
TLZ C,777774 ;CALCULATE SIGMA C↑2
ASH C,1
ADD B,A ;AND TOTAL MEASURE
ADD B,C
MOVE F,D ;BOUNDARY CALCULATION
PUSH E,B ;WHICH WE STORE
ADDM A,AVCAR
AOBJN T,CRXLP ;SHIFT IN X, AND TRY AGAIN
ADD T,WSIZ1 ;ADD WHATS NEEDED TO GET TO NEXT
SOJGE TTT,CRYLP ;SCANLINE, AND TRY AGAIN
MOVE THIS,SOUWIN ;RETURN THE USED CORAGE
PUSHJ P,CORREL
MOVE THIS,DESWIN
PUSHJ P,CORREL
MOVE 1,AVCAR ;GET READY TO RETURN VALUE OF MATCH
QUITR: JRST @RETAD ;AND RETURN
END